package com.request;

import com.alibaba.fastjson.annotation.JSONField;
import com.entity.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 新增订单请求体
 * @author zhang
 */
@Data
@ApiModel("新增订单请求实体类")
public class AddOrderReq extends BaseModel implements Serializable {
    /**
     * 门店编号
     */
    @ApiModelProperty(value = "门店编号", required = true)
    @JSONField(name = "shop_no")
    private String shopNo;

    /**
     * 第三方订单ID
     */
    @ApiModelProperty(value = "第三方订单ID", required = true)
    @JSONField(name = "origin_id")
    private String originId;

    /**
     * 订单所在城市的code
     */
    @ApiModelProperty(value = "订单所在城市的code", required = true)
    @JSONField(name = "city_code")
    private String cityCode;

    /**
     * 订单金额（单位：元）
     */
    @ApiModelProperty(value = "订单金额（单位：元）", required = true)
    @JSONField(name = "cargo_price")
    private BigDecimal cargoPrice;

    /**
     * 订单重量（单位：Kg）
     */
    @ApiModelProperty(value = "订单重量（单位：Kg）", required = true)
    @JSONField(name = "cargo_weight")
    private BigDecimal cargoWeight;

    /**
     * 是否需要垫付 1:是 0:否 (垫付订单金额,非运费,如果垫付则骑士垫付)
     */
    @ApiModelProperty(value = "是否需要垫付 1:是 0:否 ", required = true)
    @JSONField(name = "is_prepay")
    private Integer isPrepay;

    /**
     * 收货人姓名
     */
    @ApiModelProperty(value = "收货人姓名", required = true)
    @JSONField(name = "receiver_name")
    private String receiverName;

    /**
     * 收货人手机号(手机号和座机号必填一项）
     */
    @ApiModelProperty(value = "收货人手机号", required = true)
    @JSONField(name = "receiver_phone")
    private String receiverPhone;

    /**
     * 收货人地址
     */
    @ApiModelProperty(value = "收货人地址", required = true)
    @JSONField(name = "receiver_address")
    private String receiverAddress;

    /**
     * 收货人地址纬度
     */
    @ApiModelProperty(value = "收货人地址纬度", required = true)
    @JSONField(name = "receiver_lat")
    private BigDecimal receiverLat;

    /**
     * 收货人地址经度
     */
    @ApiModelProperty(value = "收货人地址经度", required = true)
    @JSONField(name = "receiver_lng")
    private BigDecimal receiverLng;

    /**
     * 回调URL
     */
    @ApiModelProperty(value = "回调URL", required = true)
    private String callback;

    /**
     * 小费（单位：元，精确小数点后一位）
     */
    @ApiModelProperty(value = "小费", required = false)
    private BigDecimal tips;

     /**
     * 订单备注
     */
    @ApiModelProperty(value = "订单备注", required = false)
    private String info;

    /**
     * 支持配送的物品品类见链接。请选择门店真实配送品类，如无法判断可咨询您的销售经理。
     */
    @ApiModelProperty(value = "支持配送的物品品类见链接", required = false)
    @JSONField(name = "cargo_type")
    private Integer cargoType;

    /**
     * 订单商品数量
     */
    @ApiModelProperty(value = "订单商品数量", required = false)
    @JSONField(name = "cargo_num")
    private Integer cargoNum;

    /**
     * 发票抬头
     */
    @ApiModelProperty(value = "发票抬头", required = false)
    @JSONField(name = "invoice_title")
    private String invoiceTitle;

    /**
     * 订单来源标示（只支持字母，最大长度为10）
     */
    @ApiModelProperty(value = "订单来源标示", required = false)
    @JSONField(name = "origin_mark")
    private String originMark;

    /**
     * 订单来源编号，最大长度为30，该字段可以显示在骑士APP订单详情页面，示例：
     * origin_mark_no:"#京东到家#1"
     * 达达骑士APP看到的是：#京东到家#1
     */
    @ApiModelProperty(value = "订单来源编号", required = false)
    @JSONField(name = "origin_mark_no")
    private String originMarkNo;

    /**
     * 是否使用保价费（0：不使用保价，1：使用保价； 同时，请确保填写了订单金额（cargo_price））
     * 商品保价费(当商品出现损坏，可获取一定金额的赔付)
     */
    @ApiModelProperty(value = "是否使用保价费（0：不使用保价，1：使用保价）", required = false)
    @JSONField(name = "is_use_insurance")
    private String isUseInsurance;

    /**
     * 收货码（0：不需要；1：需要。收货码的作用是：骑手必须输入收货码才能完成订单妥投）
     */
    @ApiModelProperty(value = "收货码(0：不需要；1：需要)", required = false)
    @JSONField(name = "is_finish_code_needed")
    private Integer isFinishCodeNeeded;

    /**
     * 预约发单时间（预约时间unix时间戳(10位),精确到分;整分钟为间隔，并且需要至少提前5分钟预约，可以支持未来3天内的订单发预约单。）
     */
    @ApiModelProperty(value = "预约发单时间", required = false)
    @JSONField(name = "delay_publish_time")
    private Integer delayPublishTime;

    /**
     * 是否选择直拿直送（0：不需要；1：需要。选择直拿直送后，同一时间骑士只能配送此订单至完成，同时，也会相应的增加配送费用）
     */
    @ApiModelProperty(value = "是否选择直拿直送(0：不需要；1：需要)", required = false)
    @JSONField(name = "is_direct_delivery")
    private Integer isDirectDelivery;

    /**
     * 货架信息,该字段可在骑士APP订单备注中展示
     */
    @ApiModelProperty(value = "货架信息", required = false)
    @JSONField(name = "pick_up_pos")
    private String pickUpPos;

    /**
     * 订单商品明细
     */
    @ApiModelProperty(value = "订单商品明细", required = false)
    @JSONField(name = "product_list")
    private List<ProductListReq> productList;
}
